/**
 * 统计[1,N]之间1-9出现的次数
 */
#include <bits/stdc++.h>
using namespace std;

using llt = long long;
llt const MOD = 1E9 + 7;
// Dijk, j表示当前查询的目标，即1-9中的一个
// k表示数量
llt D[15][10][15]; 
vector<int> G;
int const FULL = 10;
int Target;

llt dfs(int pos, int cnt, bool lead, bool limit){
    if(-1 == pos){ 
        return cnt;
    }
    if(not lead and not limit and -1 != D[pos][Target][cnt]){
        return D[pos][Target][cnt];
    }

    int last = limit ? G[pos] : FULL - 1;
    llt ans = 0;
    for(int i=0;i<=last;++i){
        if(0 == i and lead){
            ans += dfs(pos - 1, cnt, true, limit&&last==i);
        }else{
            ans += dfs(pos - 1, i == Target ? cnt + 1 : cnt, false, limit&&last==i);
        }
    }

    if(not lead and not limit){
        D[pos][Target][cnt] = ans;
    }
    return ans;
}

array<llt, 10> digitDP(llt n){
    G.clear();
    while(n){
        G.emplace_back(n % FULL);
        n /= FULL;
    }
    array<llt, 10> ans;
    for(Target=0;Target<10;++Target){
        ans[Target] = dfs(G.size() - 1, 0, true, true);
    }
    return ans;
}

llt A, B;
void work(){
    cin >> A >> B;
    auto a = digitDP(A - 1);
    auto b = digitDP(B);
    for(int i=0;i<10;++i)cout << b[i] - a[i] << " ";
    cout << endl;
    return;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);	
    memset(D, -1, sizeof(D));
    int nofkase = 1;
    // cin >> nofkase;
    while(nofkase--) work();
	return 0;
}